package cn.design;

import cn.design.realize.demo1.Handler;
import cn.design.realize.demo1.StaffHandler;
import cn.design.realize.demo2.CEOHandler;
import cn.design.realize.demo2.ManagerHandler;

import java.util.Arrays;
import java.util.List;

/**
 * @author dlq
 * @description 责任链调用模式
 * @date 2020/9/25 10:06
 * @since 1.0
 */
public class ChainClient {
    public static void main(String[] args) {

        //故事背景
        // 你要审批报销费用走一个一个流程，
        //这个审批流程过程--
        // <=500 ，普通员工可以直接审批通过
        // <=500 ，经理可以直接审批通过
        // <=2000 ，CEO可以直接审批通过
        // >2000 ，报销太多，不通过了



        //1. 将链声明在方法内部--把链放到了内部
        //报销的金额
        List<Integer> list = Arrays.asList(100,600,1100,2101);
        //先从员工开始 审批
        Handler handler = new StaffHandler();
        for (Integer num:list){
            handler.approval(num);
            System.out.println();
        }

        System.out.println("===========================");
        //2. 将链声明在方先定义在外部，直接什么有哪些链
        //先从员工开始 审批
        cn.design.realize.demo2.Handler handler2 = new cn.design.realize.demo2.StaffHandler();
        handler2.setNextHandler(new ManagerHandler()).setNextHandler(new CEOHandler());

        for (Integer num:list){
            handler2.approval(num);
            System.out.println();
        }
    }
}
